/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package miselania.indexes;
      

/**
 *
 * @author DIANA
 */

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.table.DefaultTableModel;
import miselania.almacenamiento.*;
import miselania.almacenamiento.*;


public class GestionPaginasIndex {
    
     String nombreArchivo = "relacionpaginaindex.dat";
    List<Atributo> attrs;
    Relacion rel;
    Random random = new Random();
    int nroPaginas;
    
    private char GenerarCaracter() {
        String a = "abcdefghijklmnopqrstuvwxyz";
        return a.charAt(random.nextInt(a.length()));
    }

    private Byte GenerarByte() {
        Integer a = random.nextInt(50);
        Object o = (Object) a;
        return new Byte(o.toString());
    }

    private Short GenerarShort() {
        Integer a = random.nextInt(32000);
        Object o = (Object) a;
        return new Short(o.toString());
    }

    private int GenerarEntero() {
        return random.nextInt();
    }

    private long GenerarLong() {
        return random.nextLong();
    }

    private float GenerarFloat() {
        return random.nextFloat();
    }

    private double GenerarDouble() {
        return random.nextDouble();
    }

    private String GenerarCadena() {
        int longitudCadena = random.nextInt(40) + 1;
        String c = "";
        for (int i = 0; i < longitudCadena; i++) {
            Character a = GenerarCaracter();
            c += a.toString();
        }
        return c;
    }

    private Tupla GenerarTupla(int i) {
        List<Comparable> v = new ArrayList<Comparable>();
        v.add(GenerarCaracter());
        v.add(GenerarByte());
        v.add(GenerarShort());
        v.add(GenerarEntero());
        v.add(GenerarLong());
        v.add(GenerarFloat());
        v.add(GenerarDouble());
        v.add(GenerarCadena());

        return new Tupla(new IdentificadorTupla(nombreArchivo, i), v);
    }

    public static void main(String[] args) {
        try {
            GestionPaginasIndex GPI=new GestionPaginasIndex();   
            List<Atributo> attrs = new ArrayList<Atributo>();
            attrs.add(new Atributo("character", Character.class));
            attrs.add(new Atributo("byte", Byte.class));
            attrs.add(new Atributo("short", Short.class));
            attrs.add(new Atributo("integer", Integer.class));
            attrs.add(new Atributo("long", Long.class));
            attrs.add(new Atributo("float", Float.class));
            attrs.add(new Atributo("double", Double.class));
            attrs.add(new Atributo("string", String.class));
            // Esquema de relación
            Relacion rel = new Relacion(attrs);
            //
            
            int nroTuplas = GPI.random.nextInt(8000);
            //int nroTuplas = 5000;
            int nroPagina = 0;
            IdentificadorPagina pid1 = new IdentificadorPagina(GPI.nombreArchivo, nroPagina);
           
            RandomAccessFile raf = new RandomAccessFile(GPI.nombreArchivo, "rw");
            Pagina p = new Pagina(rel, pid1);
            for (int i = 0; i < nroTuplas; i++) {

                Tupla t = GPI.GenerarTupla(i);
                //System.out.println(t);
                if (p.hayEspacio(t)) {
                    p.adicionarTupla(t);
                } else {
                    GestorIOPagina.escribirPagina(raf, p);
                    System.out.println(p.toString());
                    nroPagina++;
                    GPI.nroPaginas = nroPagina;
                    pid1 = new IdentificadorPagina(GPI.nombreArchivo, nroPagina);
                    p = new Pagina(rel, pid1);

                }
                }
            //raf.close();
            
            
            System.out.println("LEER PAGINAS::......!!!!");
            System.out.println("************************");
            System.out.println("");
            
            System.out.println("leyendo pagina...S/N");
            int nroPaginaR = 0;
            
            while (true) {
                Pagina pagina1 = GestorIOPagina.leerPagina(rel, new IdentificadorPagina(GPI.nombreArchivo, nroPagina), raf);
                int nroTuplasR = pagina1.getNumeroDeTuplas();
                for (int i = 0; i < nroTuplasR; i++) {
                    Tupla t = pagina1.recuperarTupla(i);
                    t.toString();
                }
                GPI.nroPaginas = nroPaginaR;
                nroPagina++;
                //System.out.println(pagina1);
                if (false) {
                    break;
                }
            
            
            
            }
            
            //*****
           raf.close();

        } catch (Exception e) {
        }
        
    }
}
    
